class Solution {
    
public:
    int myAtoi(string s) {
        
        int nRet=0;
        int idx=0;
        bool bFlg=false;
        while(idx<s.size() && s[idx]==' '){
            ++idx;
        }
        if(idx<s.size() && s[idx]=='-'){
            bFlg=true;
            ++idx;
        }
        else if(idx<s.size() && s[idx]=='+'){
            ++idx;
        }
        while(idx<s.size() && s[idx]=='0'){
            ++idx;
        }
        for(int i=idx;i<s.size();++i){
            if(s[i]>='0' && s[i]<='9'){
                if(!bFlg && static_cast<long long>(nRet)*10>=(INT_MAX-(s[i]-'0'))){
                    nRet=INT_MAX;
                    break;
                }
                else if(bFlg && static_cast<long long>(nRet)*10+(s[i]-'0')>=INT_MAX+static_cast<long long>(1)){
                    nRet=INT_MIN;
                    break;
                }
                else{
                    nRet=nRet*10+(s[i]-'0');
                }
                
            }
            else{
                if(bFlg && nRet>0){
                    nRet=-nRet;
                }                
                return nRet;
            }

        }

        if(bFlg && nRet>0){
            nRet=-nRet;
        }
        return nRet;
    }
};
